package _04io;


import java.io.*;
import java.util.Arrays;

/**
 * @description:
 * @author: songtao@cskaoyan.onaliyun.com
 **/

/*
递归查找指定目录中(包括子目录中)，所有的.java文件，并且，
把所有这些找到的java文件，复制(是复制不是移动)到一个指定的目录下
 */
public class Work7 {
    public static void main(String[] args) throws IOException {
        // 指定源目录
        File srcDir = new File("D:\\app2");
        // 指定目的目录
        File desDir = new File("D:\\copyResult");
        // 查找java文件
        findFile(srcDir,desDir);
    }

    private static void findFile(File srcDir, File desDir) throws IOException {
        // 从源目录中找java文件
        File[] files = srcDir.listFiles();
        System.out.println(Arrays.toString(files));
        if (files.length > 0) {
            for (File file : files) {
                // 判断是否是文件
                if (file.isFile()) {
                    // 判断是否是java文件
                    // lambda表达式
                    boolean javaFile = isJavaFile((file1) -> file1.getPath().endsWith(".java"), file);
                    if (javaFile) {
                        // 是  进行复制操作
                        copyFile(file,desDir);
                    }
                    // 不是 忽略
                }else{
                    // 是目录
                    // 递归 继续查找
                    findFile(file,desDir);
                }

            }
        }
    }

    private static boolean isJavaFile(FileFilter filter,File file){
        return filter.accept(file);
    }

    private static void copyFile(File srcFile,File desDir) throws IOException {
        // 创建输入流对象
        FileInputStream in = new FileInputStream(srcFile);
        // 创建输出流对象
        FileOutputStream out = new FileOutputStream(desDir + "\\" + srcFile.getName());

        // 边读边写
        byte[] bytes = new byte[1024];
        int readCount;
        while ((readCount = in.read(bytes)) != -1) {
            out.write(bytes, 0, readCount);
        }
        // close
        in.close();
        out.close();
    }

}

